home *** CD-ROM | disk | FTP | other *** search
-
- /***********************************************************
-
- Automatic Investment Management
- by
- David McCourt
- ************************************************************/
-
- #include bdscio.h
- #define CLEARS "\032" /* clear screen code */
- #define MAX_ISS 15 /* number of stocks or mutual funds */
- #define MAX_LET 11 /* number of letters in name */
- char name[MAX_ISS] [MAX_LET]; /* name of stock or fund */
- char shares[MAX_ISS] [5]; /* no of shares owned */
- char price[MAX_ISS] [5]; /* current price */
- char cost[MAX_ISS] [5]; /* total invested in stock/fund
- when shares are sold as directed
- by AIM, the total cost is reduced
- by the amount of the sale
- */
- char value[MAX_ISS] [5]; /* current total value */
- char control[MAX_ISS] [5]; /* used for buy/sell decisions */
- char aim_rec[MAX_ISS] [5]; /* the buy sell amount */
- char bs[MAX_ISS] [5]; /* 'buy' or 'sell' instruction */
- char str[10]; /* used for input to floating point */
- char m1[5]; /* used to compute control */
- char m2[5];
- char m4[5];
- char tot_inv[5]; /* used to compute various totals */
- int x, iss_num, w_o; /* iss_num = count of issues in file
- w_o = issue currently being worked on
- x = transaction code
- */
-
- main()
- {
- iss_num = -1;
- atof(m1, "1.1");
- atof(m2, ".5");
- atof(m4, ".1");
- menu();
-
- }
-
- menu()
- {
-
- x = 0;
- puts(CLEARS);
- puts("\n\t\tMenu for Automatic Investment Management\n");
- puts("\t\t========================================\n\n");
- puts("\t\t\t 0) End session\n");
- puts("\t\t\t 1) Original investment\n");
- puts("\t\t\t 2) Dividends received as stock\n");
- puts("\t\t\t 3) Additional cash invested\n");
- puts("\t\t\t 4) AIM Market order - SELL \n");
- puts("\t\t\t 5) AIM Market order - BUY\n");
- puts("\t\t\t 6) Review portfolio\n");
- puts("\t\t\t 7) Save file\n");
- puts("\t\t\t 8) Read file\n");
- puts("\t\t\t 9) Delete issue\n");
- puts("\t\t\t10) Update Prices\n");
- puts("\t\t\t11) Money Market original investment\n");
- puts("\t\t\t12) Money Market deposits, withdrawal\n");
- puts("\t\t\t and interest received\n");
- printf("\n\n\t\tEnter your choice: ");
-
- scanf("%d",&x);
-
- switch(x){
- case 0:
- exit();
- break;
- case 1:
- org_pur();
- shs_pur();
- break;
- case 2:
- list();
- sel_iss();
- shs_pur();
- break;
- case 3:
- new_add();
- break;
- case 4:
- list();
- sel_iss();
- shs_pur();
- break;
- case 5:
- list();
- sel_iss();
- shs_pur();
- break;
- case 6:
- ind_rep();
- break;
- case 7:
- save();
- break;
- case 8:
- load();
- break;
- case 9:
- delete();
- break;
- case 10:
- list();
- sel_iss();
- up_date();
- break;
- case 11:
- org_pur();
- dep_mon();
- break;
- case 12:
- list();
- sel_iss();
- dep_mon();
- break;
- default:
- menu();
- }
- menu();
- }
-
- dep_mon()
- {
- char add_cash[5];
-
- puts(CLEARS);
- printf("\n\t\tWorking on: %s",name[w_o]);
- puts("\n\n\t\tEnter the amount of the deposit: ");
- atof(add_cash, gets(str));
- atof(price[w_o], "1"); /* set price per share to $1 */
- fpadd(cost[w_o],cost[w_o],add_cash);
- fpadd(control[w_o],control[w_o],add_cash);
- fpadd(shares[w_o],shares[w_o],add_cash);
- fpadd(value[w_o],value[w_o],add_cash);
-
- }
-
- org_pur()
- {
- int i;
-
- ++iss_num;
- w_o = iss_num;
- puts(CLEARS);
- puts("\n\n\tEqual amounts of money should be deposited in\n");
- puts("\tstock or mutual funds and money market funds.\n");
- puts("\n\tEnter name of stock or fund:\n");
- puts("\tFill all blanks with spaces.\n");
- puts("\tThen press space bar to continue..\n");
- puts("\n\n\t[..........]\b\b\b\b\b\b\b\b\b\b\b");
- for(i=0;(name[iss_num][i] = getchar())!='\n' && i<MAX_LET;++i);
- name[iss_num] [10] ='\0';
- }
- shs_pur()
- {
- char add_shs[5];
- char new_con[5];
- char add_cash[5];
- puts(CLEARS);
- printf("\nWorking on: %s", name[w_o]);
- puts("\n======================\n\n");
- puts("(enter all negative figures with a minus)\n\n");
- puts("\nEnter number of shares bought/sold....\t");
- atof(add_shs, gets(str));
- puts("Enter current price per share..........\t");
- atof(price[w_o], gets(str));
- fpmult(tot_inv,add_shs,price[w_o]);
- printf("\nThis transaction = %10.3f", tot_inv);
- fpadd(shares[w_o],shares[w_o],add_shs);
- fpmult(value[w_o],price[w_o],shares[w_o]);
- if(x==1){
- fpmult(control[w_o],price[w_o],shares[w_o]);
- fpmult(cost[w_o],price[w_o],shares[w_o]);
- }
- if(x==3){
- fpmult(new_con,tot_inv,m1);
- fpadd(control[w_o],control[w_o],new_con);
- fpadd(cost[w_o],cost[w_o],tot_inv);
- }
- if(x==4){
- fpadd(cost[w_o],cost[w_o],tot_inv);
- }
- if(x==5){
- fpmult(new_con,tot_inv,m2);
- fpadd(control[w_o],control[w_o],new_con); fpadd(cost[w_o],cost[w_o],tot_inv);
- }
- hold();
- }
-
- hold()
- {
- puts("\n\nPress <RETURN> to continue...");
- getchar();
- }
-
- list()
- {
- int i;
- puts(CLEARS);
- i = 0;
- printf("\n\n\t\tNumber\t\tName\n");
- while(i != iss_num+1){
- printf("\n\t\t%6d\t\t%s",i,name[i]);
- ++i;
- }
- }
- ind_rep()
- {
- char p_l[5];
- char ave_cost[5];
- char port_val[5];
-
- atof(port_val,"0");
- atof(p_l, "0");
- puts(CLEARS);
- puts("Name of Shares Cur Cur Ave Control Buy/Sell\n");
- puts("Issue Owned Price Value Cost Amount Advice\n");
- puts("========== ========= ======== ========= ======== ========== =============");
- puts("\n\n");
- for(w_o=0; w_o < iss_num +1; ++w_o){
- aim();
- fpsub(p_l, value[w_o], cost[w_o]);
- fpdiv(ave_cost,cost[w_o],shares[w_o]);
- printf("%s",name[w_o]);
- printf("%10.3f",shares[w_o]);
- printf("%9.3f",price[w_o]);
- printf("%11.3f",value[w_o]);
- printf("%9.3f",ave_cost);
- printf("%11.3f",control[w_o]);
- printf("%10.2f %s\n",aim_rec[w_o],bs[w_o]);
- fpadd(port_val,port_val,value[w_o]);
- }
- puts("\n\n");
- puts("===========================================================================");
- printf("\nPorfolio Value: %11.3f",port_val);
- hold();
- }
- sel_iss()
- {
- puts("\n\nSelect issue number: ");
- scanf("%d", &w_o);
- }
-
- new_add()
- {
- int z;
- puts(CLEARS);
- puts("Select 1) New issue or 2) Additional stock\n");
- scanf("%d", &z);
- switch(z){
- case 1:
- org_pur();
- shs_pur();
- break;
- case 2:
- list();
- sel_iss();
- shs_pur();
- break;
- default:
- new_add();
- }
- }
- up_date()
- {
- puts(CLEARS);
- printf("\nEnter price for: %s: ", name[w_o]);
- atof(price[w_o], gets(str));
- fpmult(value[w_o],price[w_o],shares[w_o]);
- }
- save()
- {
- char iobuf[BUFSIZ];
- int a,b,c;
- puts(CLEARS);
- puts("Saving file to disk ...");
- if(iss_num < 0){
- puts("CAUTION !!! file is empty.");
- hold();
- menu();
- }
- if(fcreat("AIM.FIL",iobuf) == ERROR){
- puts("\nCan't create AIM.FIL\n");
- return(ERROR);
- }
- putw(iss_num,iobuf);
- for(a=0; a < iss_num +1; ++a){
- for(b=0; b < MAX_LET; ++b){
- c = name[a] [b];
- putw(c,iobuf);
- }
- }
- for(a=0; a< iss_num + 1; ++a){
- for(b=0; b < 5; ++b){
- c = shares[a] [b];
- putw(c,iobuf);
- c = price[a] [b];
- putw(c,iobuf);
- c = cost[a] [b];
- putw(c,iobuf);
- c = value[a] [b];
- putw(c,iobuf);
- c = control[a] [b];
- putw(c,iobuf);
- c = aim_rec[a] [b];
- putw(c,iobuf);
- }
- }
- fflush(iobuf);
- fclose(iobuf);
- }
- load()
- {
- char iobuf[BUFSIZ];
- int a,b,c;
- puts(CLEARS);
- puts("Loading file ...");
- if(fopen("AIM.FIL",iobuf) == ERROR){
- puts("\nCan't open AIM.FIL\n");
- return(ERROR);
- }
- iss_num = getw(iobuf);
- for(a=0; a < iss_num +1; ++a){
- for(b=0; b < MAX_LET; ++b)
- name[a] [b] = getw(iobuf);
- }
- for(a=0; a < iss_num +1; ++a){
- for(b=0; b < 5; ++b){
- shares[a] [b] = getw(iobuf);
- price[a] [b] = getw(iobuf);
- cost[a] [b] = getw(iobuf);
- value[a] [b] = getw(iobuf);
- control[a] [b] = getw(iobuf);
- aim_rec[a] [b] = getw(iobuf);
- }
- }
- fclose(iobuf);
- }
- aim()
- {
- char safe[5];
- char test[5];
- int y;
- fpmult(safe,value[w_o],m4);
- atof(test, "100");
- y = fpcomp(value[w_o],control[w_o]);
- if(y==1){
- fpsub(aim_rec[w_o],value[w_o],control[w_o]);
- fpsub(aim_rec[w_o],aim_rec[w_o],safe);
- strcpy(bs[w_o], "Sell");
- }
- if(y==-1){
- fpsub(aim_rec[w_o],control[w_o],value[w_o]);
- fpsub(aim_rec[w_o],aim_rec[w_o],safe);
- strcpy(bs[w_o], "Buy ");
- }
- if(y==0)
- atof(aim_rec[w_o], "0");
- y = fpcomp(aim_rec[w_o], test);
- if(y==-1){
- atof(aim_rec[w_o], "0");
- strcpy(bs[w_o], "None");
- }
- }
- delete()
- {
- int i,y;
- puts(CLEARS);
- list();
- sel_iss();
- while(w_o < iss_num+1){
- for(i=0; i < 6; ++i){
- name[w_o] [i] = name[w_o +1] [i];
- shares[w_o] [i] = shares[w_o + 1] [i];
- price[w_o] [i] = price[w_o +1] [i];
- cost[w_o] [i] = cost [w_o +1] [i];
- value[w_o] [i] = value[w_o +1] [i];
- control[w_o] [i] = control[w_o +1] [i];
- aim_rec[w_o] [i] = aim_rec[w_o +1] [i];
- }
- ++w_o;
- }
- iss_num = iss_num -1;
- }
-
- /* remark end of file aim.c */
- test[